package simple.number;

/**
 * <a href="https://leetcode.cn/problems/third-maximum-number/">414. 第三大的数</a>
 * 给你一个非空数组，返回此数组中 第三大的数 。如果不存在，则返回数组中最大的数。
 * 示例 1：
 *   输入：[3, 2, 1]
 *   输出：1
 *   解释：第三大的数是 1 。
 * 示例 2：
 *   输入：[1, 2]
 *   输出：2
 *   解释：第三大的数不存在, 所以返回最大的数 2 。
 * 示例 3：
 *   输入：[2, 2, 3, 1]
 *   输出：1
 *   解释：注意，要求返回第三大的数，是指在所有不同数字中排第三大的数。
 *   此例中存在两个值为 2 的数，它们都排第二。在所有不同数字中排第三大的数为 1 。
 * 提示：
 *   1 <= nums.length <= 10^4
 *   -2^31 <= nums[i] <= 2^31 - 1
 * @author 刘学松
 * @date 2023-05-12 15:35
 */
public class 第三大的数 {
    public int thirdMax(int[] nums) {
        long max = Long.MIN_VALUE, mid = Long.MIN_VALUE, min = Long.MIN_VALUE;
        for (int num : nums) {
            if (num > max) {
                min = mid;
                mid = max;
                max = num;
            } else if (max > num && num > mid) {
                min = mid;
                mid = num;
            } else if (mid > num && num > min) {
                min = num;
            }
        }
        return min == Long.MIN_VALUE ? (int)max : (int)min;
    }
}
